package proyectoX.src.entidades;

import java.awt.Point;
import java.awt.Rectangle;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.LaserTransporte;

import java.util.Random;

/**
 * Nave de transporte. Siempre deja powerups. Dispara una bola de energía.
 * Puede tener desplazamiento hacia derecha, izquierda o centro. En los tres casos es hacia abajo.
 *
 */
public class Transporte extends Enemiga {
	
	protected int despX;
	
	/**
	 * Crea a la nave con los datos pasados por parámetro.
	 * @param nivel Nivel actual.
	 * @param ref Imagen a utilizar.
	 */
	public Transporte(Nivel nivel,ImageIcon ref){
		super(nivel,8, ref,15,5);
		laserE = new LaserTransporte(nivel);
		
		Random generador = new Random();
		
		//define si se desplaza hacia la izquierda o derecha
		int aux = generador.nextInt(2);
		
		if (aux == 0) {
			despX = -1;
		}
		else {
			despX = 1;
		}
	}

	/**
	 * Crea a la nave con los datos pasados por parámetro.
	 * Si mov es positivo se mueve hacia la derecha, si es negativo hacia la izquierda y si es 
	 * 0 cae verticalmente.
	 * @param nivel Nivel actual.
	 * @param ref Imagen a utilizar.
	 * @param mov Desplazamiento horizontal.
	 */
	public Transporte(Nivel nivel,ImageIcon ref, int mov){
		super(nivel,8, ref,15,5);
		laserE = new LaserTransporte(nivel);
		despX = mov;
	}
	
	/**
	 * Dispara una bola de energía usando la posición pasada como parámetro como referencia.
	 * @param location Posición de referencia.
	 */
	public void disparar(Point location){
		laserE.disparar(location);
	}

	/**
	 * Se desplaza hacia abajo pero su desplazamiento horizontal depende del valor de
	 * despX. Si es positivo es hacia derecha, si es negativo es hacia izquierda y si 
	 * es 0 es centrado.
	 */
	public void mover() {
		Point position = this.getLocation();
		
		position.translate(+despX,+velocidad);
		this.setLocation(position);
	}

	/**
	 * Devuelve el área de colisión. 
	 * @return Área de colisión. 
	 */
	public Rectangle getBounds() {
		return new Rectangle(this.getX()+22, this.getY()+24, 27, 27);  
	}
	
	/**
	 * Al morir indica a nivel que debe crear un powerup y dejarlo debajo de esta nave.
	 */
	public void muerte() {
		//powerup aleatorio creado en el centro de la nave
		nivel.crearPowerupTransporte(getX()+getWidth()/2-16, getY()+getHeight()/2-16);
		super.muerte();
	}

	/**
	 * Establece el tipo de desplazamiento horizontal para la nave.
	 * @param mov Movimiento horizontal a utilizar.
	 */
	public void setDespX(int mov) {
		despX = mov;
	}
}
